﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using grupo2DEWStudio7i.Dominio;
using System.Data.SqlClient;

namespace grupo2DEWStudio7i.Persistencia.ADO
{
    public class DetalleSalaDAO : IDetalleSala
    {
        #region IBaseDAO<DetalleSala,int> Members

        public DetalleSala Crear(DetalleSala entidad)
        {
            string _SQL = @"INSERT INTO detallesala(codigoSala,tipoAsignacion,codigoSevicio,codigoInstrumento)
                            VALUES(@codigoSala,@tipoAsignacion,@codigoSevicio,@codigoInstrumento)";

            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_SQL, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigoSala", entidad.codigoSala));
                    _Comando.Parameters.Add(new SqlParameter("@tipoAsignacion", entidad.tipoAsignacion));
                    _Comando.Parameters.Add(new SqlParameter("@codigoSevicio", entidad.Servicio.Codigo));
                    _Comando.Parameters.Add(new SqlParameter("@codigoInstrumento", entidad.Instrumento.CodInstrumento));
                    _Comando.ExecuteNonQuery();
                }
            }
            return entidad;
        }

        public DetalleSala Modificar(DetalleSala entidad)
        {
            string _SQL = @"UPDATE detallesala
                            SET tipoAsignacion=@tipoAsignacion,codigoSevicio=@codigoSevicio,codigoInstrumento=@codigoInstrumento
                            WHERE codigoSala=@codigoSala";

            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_SQL, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigoSala", entidad.codigoSala));
                    _Comando.Parameters.Add(new SqlParameter("@tipoAsignacion", entidad.tipoAsignacion));
                    _Comando.Parameters.Add(new SqlParameter("@codigoSevicio", entidad.Servicio.Codigo));
                    _Comando.Parameters.Add(new SqlParameter("@codigoInstrumento", entidad.Instrumento.CodInstrumento));
                    _Comando.ExecuteNonQuery();
                }
            }
            return entidad;
        }

        public void Eliminar(DetalleSala entidad)
        {
            string _SQL = @"DELETE detallesala
                            WHERE codigoSala=@codigoSala";

            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_SQL, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigoSala", entidad.codigoSala));
                    _Comando.ExecuteNonQuery();
                }
            }
        }

        public ICollection<DetalleSala> ListarXSala(int codigoSala)
        {
            IServicioDAO servicioDAO = new ServicioDAO();
            IInstrumentoDAO instrumentoDAO = new InstrumentoDAO();

            string _SQL = "SELECT codigoSala, tipoAsignacion, codigoSevicio, codigoInstrumento FROM detallesala WHERE codigoSala=@codigoSala";
            ICollection<DetalleSala> detalleSalaEncontrados = new List<DetalleSala>();
            DetalleSala detalleSalaEncontrado = null;
            using (SqlConnection _Conexion = new SqlConnection(ConexionUtil.ObtenerCadena()))
            {
                _Conexion.Open();
                using (SqlCommand _Comando = new SqlCommand(_SQL, _Conexion))
                {
                    _Comando.Parameters.Add(new SqlParameter("@codigoSala", codigoSala));
                    using (SqlDataReader _Resultado = _Comando.ExecuteReader())
                    {
                        while (_Resultado.Read())
                        {
                            detalleSalaEncontrado = new DetalleSala();
                            detalleSalaEncontrado.codigoSala = (int)_Resultado["codigoSala"];
                            detalleSalaEncontrado.tipoAsignacion = (int)_Resultado["tipoAsignacion"];
                            if (_Resultado["codigoSevicio"] != DBNull.Value)
                                detalleSalaEncontrado.Servicio = servicioDAO.Obtener((int)_Resultado["codigoSevicio"]);
                            if (_Resultado["codigoInstrumento"] != DBNull.Value)
                                detalleSalaEncontrado.Instrumento = instrumentoDAO.Obtener((int)_Resultado["codigoInstrumento"]);
                            detalleSalaEncontrados.Add(detalleSalaEncontrado);
                        }
                    }
                }
            }
            return detalleSalaEncontrados;
        }

        public ICollection<DetalleSala> ListarTodos()
        {
            throw new NotImplementedException();
        }

        public DetalleSala Obtener(int id)
        {
            throw new NotImplementedException();
        }


        #endregion
    }
}